package br.com.ruidobrasil.manterusuario {
	
	import br.com.ruidobrasil.util.TratamentoErros;
	import br.com.ruidobrasil.vo.UsuarioVO;
	
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.events.CloseEvent;
	import mx.events.FlexEvent;
	import mx.managers.PopUpManager;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	
	public class UsuarioEdicao extends UsuarioEdicaoView {
		
		private var _telaPai: UsuarioSelecao;
		private var _vo: UsuarioVO;
		private var listaStatus: ArrayCollection;
		
		public function UsuarioEdicao(vo: UsuarioVO) {
			super();
			
			_vo = vo;
			this.addEventListener(FlexEvent.CREATION_COMPLETE, init);
		}
		
		private function init(event: FlexEvent): void {
			
			btnSalvar.addEventListener(MouseEvent.CLICK, salvar);
			btnFechar.addEventListener(MouseEvent.CLICK, fechar);
			
			this.addEventListener(CloseEvent.CLOSE, fechar);
			
			rm.obterDados.addEventListener(ResultEvent.RESULT, resultObterDados);
			rm.obterDados.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			rm.incluir.addEventListener(ResultEvent.RESULT, resultIncluir);
			rm.incluir.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			rm.alterar.addEventListener(ResultEvent.RESULT, resultAlterar);
			rm.alterar.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			
			limparDados();
			rm.obterDados();
		}
		
		private function resultObterDados(result: ResultEvent): void {
			
			criarComboStatus();
			
			if (_vo != null) {
				this.alterar();
			} else {
				this.incluir();
			}
		}
		
		private function criarComboStatus(): void {
			listaStatus = new ArrayCollection();
			
			var objStatus: UsuarioVO = new UsuarioVO();
			objStatus.status = "---";
			listaStatus.addItemAt(objStatus, 0);
			
			var objStatusAtivo: UsuarioVO = new UsuarioVO();
			objStatusAtivo.status = "ATIVO";
			objStatusAtivo.bolAtivo = "true";
			listaStatus.addItemAt(objStatusAtivo, 1);
			
			var objStatusInativo: UsuarioVO = new UsuarioVO();
			objStatusInativo.status = "INATIVO";
			objStatusInativo.bolAtivo = "false";
			listaStatus.addItemAt(objStatusInativo, 2);
			
			cbxStatus.dataProvider = listaStatus;
		}
		
		private function fechar(event: Event = null): void {
			PopUpManager.removePopUp(this);
			_telaPai.pesquisar();
		}
		
		private function limparDados(): void {
			txtLogin.text = "";
			txtSenha.text = "";
			cbxStatus.selectedIndex = 0;
		}
		
		private function validarDados(): Boolean {
			
			var msg: String = "O campo ";
			var validacaoOk: Boolean = true;
			
			if (txtLogin.text == "") {
				msg += "Login";
				validacaoOk = false;
				
			} else if (txtSenha.text == "") {
				msg += "Senha";
				validacaoOk = false;
				
			} else if (cbxStatus.selectedIndex == 0) {
				msg += "Status";
				validacaoOk = false;
			}
			
			msg += " é de preenchimento obrigatório.";
			
			if (!validacaoOk) {
				Alert.show(msg, "Erro!");
			}
			
			return validacaoOk;
		}
		
		private function salvar(event: MouseEvent): void {
			
			if (validarDados()) {
				
				if (txtSenha.text.length < 8) {
					Alert.show("A senha deve conter 8 caracteres.", "Erro!");
					return;
				}
				
				var novaVO: UsuarioVO = new UsuarioVO();
				novaVO.login = txtLogin.actualText;
				novaVO.senha = txtSenha.text;
				novaVO.bolAtivo = cbxStatus.selectedItem.bolAtivo;
				
				if (_vo != null && _vo.idUsuario != null && _vo.idUsuario != "") {
					novaVO.idUsuario = _vo.idUsuario;
					rm.alterar(novaVO);
				} else {
					rm.incluir(novaVO);
				}
			}
		}
		
		private function resultIncluir(result: ResultEvent): void {
			Alert.show("Usuário incluído com sucesso.", "Aviso!");
			limparDados();
		}
		
		private function resultAlterar(result: ResultEvent): void {
			Alert.show("Usuário alterado com sucesso.", "Aviso!");
			fechar();
		}
		
		private function incluir(): void {
			limparDados();
			txtLogin.enabled = true;
		}
		
		private function alterar(): void {
			
			txtLogin.actualText = _vo.login;
			txtLogin.enabled = false;
			txtSenha.actualText = _vo.senha;
			
			if (_telaPai.idUsuarioLogado != _vo.idUsuario) {
				txtSenha.enabled = false;
			} else {
				txtSenha.enabled = true;
			}
			
			selecionarOpcaoComboStatus();
		}
		
		private function selecionarOpcaoComboStatus(): void {
			
			for each (var obj: UsuarioVO in cbxStatus.dataProvider) {
				if (obj.bolAtivo == _vo.bolAtivo) {
					cbxStatus.selectedItem = obj;
				}
			}
		}

		public function set telaPai(telaPai: UsuarioSelecao): void {
			_telaPai = telaPai;
		}
	}
}